/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package ec.edu.ups.cidi.siia.plamdep.cargadocumentos;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import ec.edu.ups.cidi.siia.plamdep.cargadocumentos.Lectores.LectorPDF;
import ec.edu.ups.cidi.siia.plamdep.cargadocumentos.Lectores.LectorTXT;
import ec.edu.ups.cidi.siia.plamdep.cargadocumentos.Lectores.LectorWord;
import ec.edu.ups.cidi.siia.plamdep.utils.configuracion.ConfiguracionCargaDocumentos;
import ec.edu.ups.cidi.siia.plamdep.utils.interfaces.IDocumentoLectura;
import ec.edu.ups.cidi.siia.plamdep.utils.interfaces.ILector;

/**
 *
 * @author Usuario
 */
public class Documento implements IDocumentoLectura
{
    String ruta;
    private String titulo;
    private String tema;
    private ArrayList<String> referencias=new ArrayList<String>();
    private String tipo;
    ILector lector;
   
    
     public Documento()
    {}
    public Documento(String ruta)
    {
        
            new ConfiguracionCargaDocumentos();//inizializa los parametros de configuracion
            this.ruta=ruta;
            this.tipo=this.getExtension();
            this.inicializarLector();
            this.cargarReferencias();
        
    }
    public IDocumentoLectura getIntancia(String ruta)
    {
        return new Documento(ruta);
    }
    private String getExtension()
    {
        if(ruta.trim().endsWith(".docx")||ruta.trim().endsWith(".DOCX")) return "docx";
        if(ruta.trim().endsWith(".doc")||ruta.trim().endsWith(".DOC")) return "doc";
        if(ruta.trim().endsWith(".pdf")||ruta.trim().endsWith(".PDF")) return "pdf";
        return "txt";
    }
    
    
    private  void inicializarLector()
    {
        if(getTipo().equalsIgnoreCase("PDF"))
               lector=new LectorPDF(ruta);
        else
        if(getTipo().equalsIgnoreCase("doc")||getTipo().equalsIgnoreCase("docx"))
                lector=new LectorWord(ruta);
        else lector=new LectorTXT(ruta);
    }

    /**
     * @return the contenido
     */
    public String getContenido() 
    {
        return this.lector.getContenido();
    }
     /**
     * @return the titulo
     */
    public String getTitulo() {
        return titulo;
    }

    /**
     * @return the tema
     */
    public String getTema() {
        return tema;
    }

    /**
     * @return the referencias
     */
    public ArrayList<String> getReferencias() {
        return referencias;
    }

    /**
     * @return the tipo
     */
    public String getTipo() {
        return tipo;
    }
    
    private void cargarReferencias()
    {
        //System.out.println("Cargando Referencias.....");
        for(String regex:ConfiguracionCargaDocumentos.rgxReferencia)
        {
          //  System.out.println("Regex: "+regex);
            Pattern patron=Pattern.compile(regex);
            Matcher matcher=patron.matcher(this.getContenido());
            int cont=0;
            int i=0;
            HashMap hs=new HashMap();
            while(matcher.find(i))
            {
                if(hs.containsValue(matcher.start()+":"+ matcher.end())==false)
                {   hs.put(cont,matcher.start()+":"+ matcher.end());
                    cont++;
                }    
                i=matcher.end();
            }
            int it=0;
            while(hs.containsKey(it))
            {
                    String []pos =hs.get(it).toString().split(":");
                    int ini=Integer.valueOf(pos[0]);
                    int fin=Integer.valueOf(pos[1]);
                    referencias.add(this.getContenido().substring(ini, fin));
                    it++;
            }
        }
    }
     public void cargarTextoCitado()
    {
    //    System.out.println("Cargando Texto Citado.....");
                    HashMap hs=new HashMap();

        for(String regex:ConfiguracionCargaDocumentos.rgxParrafoCitado)
        {
            System.out.println("Regex: "+regex);
            Pattern patron=Pattern.compile(regex);
            Matcher matcher=patron.matcher(this.getContenido());
            int i=0;
            while(matcher.find(i))
            {
                int fin=matcher.end();
               // if(hs.containsKey(fin)==false)
                  hs.put(fin, matcher.start());
                i=matcher.end();
            }
           
        }
         Iterator it = hs.entrySet().iterator();
            while (it.hasNext()) 
            { 
                Map.Entry e = (Map.Entry)it.next(); 
                int fin=Integer.valueOf(e.getKey().toString());
                int ini=Integer.valueOf(e.getValue().toString());
             //   System.out.println("\nTexto Citado \n"+ini+"  <---->  "+fin+"\n"+this.getContenido().substring(ini, fin));
           } 
    }
    //public void add
}
